package gupaoedu.LazySingleton;

import java.io.Serializable;

/**
 * gupaoedu.LazySingleton
 * linwenjie
 * 2019-06-18
 * 懒汉模式
 */
public class LazySingleton implements Serializable {
    private LazySingleton(){
        //以下代码为防止通过反射来破坏单例 ，但依然可以破坏
        if(LAZY_SINGLETON != null){
            throw new RuntimeException("不能创建多个实例");
        }
    }

    private static LazySingleton LAZY_SINGLETON= null;

    public static LazySingleton getInstance(){
        //会因为线程不安全而导致创建多个对象 因此使用线程锁
        if(LAZY_SINGLETON == null){
            synchronized (LazySingleton.class){
                if (LAZY_SINGLETON == null){
                    LAZY_SINGLETON = new LazySingleton();
                }
            }
        }
        return LAZY_SINGLETON;
    }

    //防止通过序列化破坏单例
    private Object readResolve(){
        return LAZY_SINGLETON;
    }



}
